<?php

/**@brief Classe controladora responsavel pelas ações do usuário Aluno
 *
 * 
 * Classe controladora responsavel pelas ações do usuário Aluno.
 * Cada metodo deste correponde a uma view na pasta 'view\aluno'
 *
 * \param Observação importante: o dado "$this->data" corresponde aos dados
 * passados via metodo post, usados nos formulários de cadastro
 * no view de cada ação.
 */
class AlunoController extends AppController {
    ///Define o template usado pelo usuário logado
    public $layout = "layout_aluno";
    ///Declara as classes usadas, no caso os Models que serão usados para persistencia.
    public $uses = array("Users","Disciplina","Turma","Diario", "Sms");

    /**
     * Metodo responsavel pela inicialização do template do aluno. Exibe na tela a saudação.
     */
    function index() {

  //Carrega os dados de todas as turmas em que o aluno esta matriculado
       $turmas=$this->Diario->all(array(
               "conditions" => array( "users_id" => $this->UserAccessComponent->user("id"))
       ));
        //Adiciona o nome da disciplina no array de disciplinas/diarios
       foreach ($turmas as $i => $value) {                                 
           $nome = $this->Disciplina->first(array("conditions" => array("id" => $turmas[$i]["disciplina_id"])));
            $turmas[$i]["nomedisciplina"]=$nome["nome"];
       }
       ///@return Envia o array de turmas para o view, para ser visualizado na tela inicial
       $this->set("turmas",$turmas );

    }

    /**Funcionalidade do sistema.
    *Metodo para alterar os dados, primeiro carrega os dados do aluno logado
    *e manda para o view
    */
    function alterarDados() {
        $aluno=$this->Users->first(array("conditions" => array("username" =>$this->UserAccessComponent->user("username") )));
        /// @return Esta função envia a variável $aluno para o view
        $this->set("aluno",$aluno);

    }

    /**
     * Complemento do metodo alterarDados. Pega os dados do formulário e
     * atualiza o aluno, caso necessário.
     */
    function resultadoAlterarDados(){
        ///@param Recebe do view o objeto $data já preenchido com todas as informações do aluno
        //Busca o aluno logado
        $aluno=$this->Users->first(array("conditions" => array("username" =>$this->UserAccessComponent->user("username") )));
        //Verifica se o campo senha foi prenchido
        if($this->data){
            if($this->data["password"]){
                //Se sim, salva as alteracoes do aluno
                $this->Users->save($this->data);
            }
            else{
                //Se não, grava a senha antiga e salva as alterações
                $this->Users->save(array("id" => $aluno["id"],
                                     "nome" => $aluno["nome"],
                                     "username" => $aluno["username"],
                                     "password" => $aluno["password"],
                                     "email" => $this->data["email"],
                                     "nivel" => "aluno",
                                     "cel" => $this->data["cel"]));
            }
            ///@return Envia para o view mensagem de confirmação
            $this->set("resultadoCadastro", "Dados pessoais atualizados com sucesso!");
        }
        
        $aluno2=$this->Users->first(array("conditions" => array("username" =>$this->UserAccessComponent->user("username") )));
        ///@return Passa os novos valores do aluno pro view 
        $this->set("aluno",$aluno2);
    }

    /**Funcionalidade do sistema.
     * Carrega as diciplinas na qual o aluno esteja matriculado e envia para
     * o formulário, para ser selecionada.
     */
    function verHistorico() {
       //Carrega os dados de todas as turmas em que o aluno esta matriculado
       $turmas=$this->Diario->all(array(
               "conditions" => array( "users_id" => $this->UserAccessComponent->user("id"))
       ));
        //Adiciona o nome da disciplina no array de disciplinas/diarios
       foreach ($turmas as $i => $value) {                                 
           $nome = $this->Disciplina->first(array("conditions" => array("id" => $turmas[$i]["disciplina_id"])));
           $turmas[$i]["disciplina"]=$nome["nome"];
       }
       ///@return Envia o array de turmas para o view
       $this->set("turmas",$turmas );
       ///@return Envia o array de disciplinas para o view
       $this->set("Disciplina",$this->Disciplina );
    }
    
    /**
     * Complemento do metodo verHistorico.
     * Recebe a escolha do aluno pelo formulário e busca todos os Sms enviados
     * a ele e manda para o view.
     */
     function listarHistorico() {

     ///@param Recebe o objeto $data contendo o id da turma selecionada
     //Carrega todos os Sms pelo aluno e pela disciplina
     $smss=$this->Sms->all(array(
               "conditions" => array( "disciplina_id" => $this->data["turma"],
                                      "turma_id" => $this->data["turma_id"])
       ));

      //adiciona o nome da disciplina no array
     foreach ($smss as $i => $value) {
           $nome = $this->Disciplina->first(array("conditions" => array("id" => $smss[$i]["disciplina_id"])));
           $smss[$i]["disciplina"]=$nome["nome"];
       }
       ///@return Envia o array de sms do aluno para o view
     $this->set("smss",$smss );
     }

    /**Funcionalidade do sistema.
     * Semelhante ao verHistorico, carrega as diciplinas na qual o aluno esteja matriculado e envia para
     * o formulário, para ser selecionada.
     */
     function verDiario() {
          //Carrega os dados de todas as disciplinas em que o aluno está matriculado
            $disciplinas=$this->Diario->all(array(
               "conditions" => array( "users_id" => $this->UserAccessComponent->user("id"))
       ));

        //Adiciona o nome da disciplina no array de disciplinas/diários
       foreach ($disciplinas as $i => $value) {

           $nome = $this->Disciplina->first(array("conditions" => array("id" => $disciplinas[$i]["disciplina_id"])));
           $disciplinas[$i]["nomedisciplina"]=$nome["nome"];
       }
       ///@return Envia o array de disciplinas do aluno para o view
       $this->set("disciplinas",$disciplinas );
     }

     /**
     * Complemento do método verDiario.
     * Recebe a escolha do aluno pelo formulário e busca as notas do diário de classe do aluno
     * e e manda para o view.
     */
   function listarDiario() {
     //Carrega o diario pelo aluno e pela disciplina
     ///@param Recebe a variavel $data contendo a disciplina selecionada
      $diario=$this->Diario->first(array(
               "conditions" => array( "users_id" => $this->UserAccessComponent->user("id"),
                   "disciplina_id" => $this->data["disciplina"] )
       ));
       ///@return Envia o array de notas para o view
     $this->set("diario",$diario );
     }

}

?>